home *** CD-ROM | disk | FTP | other *** search
- import com.siemens.mp.game.ExtendedImage;
- import com.siemens.mp.game.GraphicObjectManager;
- import com.siemens.mp.game.Sprite;
- import java.io.InputStream;
- import javax.microedition.io.Connector;
- import javax.microedition.lcdui.Canvas;
- import javax.microedition.lcdui.Font;
- import javax.microedition.lcdui.Graphics;
- import javax.microedition.lcdui.Image;
- import javax.microedition.rms.InvalidRecordIDException;
- import javax.microedition.rms.RecordComparator;
- import javax.microedition.rms.RecordEnumeration;
- import javax.microedition.rms.RecordFilter;
- import javax.microedition.rms.RecordStore;
- import javax.microedition.rms.RecordStoreException;
- import javax.microedition.rms.RecordStoreNotOpenException;
-
- class ColldemoSl45$Game extends Canvas implements Runnable {
- private static final int GAME_SCREEN_WIDTH = 96;
- private static final int GAME_SCREEN_HEIGHT = 80;
- private byte[] car0Image;
- private byte[] car0Mask;
- private byte[] bgImage;
- private byte[] mntsImage;
- private byte[] obsImage;
- private byte[] obsMask;
- private byte[] flipImage;
- private byte[] flipMask;
- private byte[] countImage;
- private byte[] countMask;
- private byte[] goImage;
- private byte[] goMask;
- private byte[] textImage;
- private byte[] textMask;
- private byte[] winnerImage;
- private byte[][] stageImages;
- private byte[] devImage;
- private byte[] titleImage;
- private byte[][] levelMap;
- private byte[][] levelTrk;
- private byte[] theMap;
- private byte[] theTrack;
- private Image gameScreenImage;
- private ExtendedImage gameScreen;
- private GraphicObjectManager gfxManager;
- private boolean readyToPaint;
- private Image[] numberImages;
- private Image[] gearImages;
- private byte[] roadbmp;
- private byte[][] roadpixels;
- private byte[] roadpix;
- private byte[] keyMap;
- private Sprite countSprite;
- private Sprite goSprite;
- private Sprite textSprite;
- private Sprite carSprite;
- private Sprite[] obsSprite;
- private Sprite flipSprite;
- private int[] zvals;
- private int[] zdiffs;
- private int[] object_widths;
- private String[] hi_names;
- private int[] hi_scores;
- private int[] player;
- private int frames;
- private int lasttime;
- private int fps;
- private int[] linetab;
- private int[] z_to_scale;
- private int[] z_to_y;
- private int joystick;
- private int[] obsticles;
- private int availObsticle;
- private int mapPos;
- private int lastScore;
- private int lastCountdown;
- private int lastSpeed;
- private int lastGear;
- private int lastTrack;
- private int flipy;
- private int flipyvel;
- private int flipspr;
- private int cdFrames;
- private int cdLastTime;
- private int cdDigit;
- private int cdFPS;
- private int gameState;
- private int gameTimer;
- private Font fontsmall;
- private int levelNum;
- private int countDown;
- private int trackSeg;
- private boolean redraw;
- // $FF: synthetic field
- private final ColldemoSl45 this$0;
-
- public ColldemoSl45$Game(ColldemoSl45 var1) {
- this.this$0 = var1;
- this.gameScreen = null;
- this.readyToPaint = false;
- this.zvals = new int[]{195, 174, 158, 144, 133, 123, 115, 107, 101, 95, 90, 86, 81, 78, 74, 71, 68, 65, 63, 61, 59, 57, 55, 53, 51, 50, 48, 47, 46, 44, 43, 42, 41, 40, 39, 38, 37};
- this.object_widths = new int[]{16, 14, 12, 10, 8, 6, 4, 3};
- this.hi_names = new String[]{"Nigel", "Andrew", "Sarah", "Phil"};
- this.hi_scores = new int[]{1000, 950, 900, 850};
- this.theMap = new byte[4000];
- this.theTrack = new byte[8000];
- this.roadbmp = new byte[444];
- this.roadpixels = new byte[28][444];
-
- try {
- this.gameScreenImage = Image.createImage(96, 80);
- this.gameScreen = new ExtendedImage(this.gameScreenImage);
- this.gameScreen.clear((byte)0);
- this.roadpix = this.ReadByteArray("track.bin", 12432);
- this.numberImages = new Image[10];
- Image var6 = Image.createImage("/numbers.png");
-
- for(int var2 = 0; var2 < 10; ++var2) {
- this.numberImages[var2] = Image.createImage(5, 7);
- Graphics var5 = this.numberImages[var2].getGraphics();
- var5.drawImage(var6, -var2 * 5, 0, 16 | 4);
- }
-
- this.obsImage = this.ReadByteArray("obs.1bp", 1536);
- this.obsMask = this.ReadByteArray("obsm.1bp", 1536);
- this.bgImage = this.ReadByteArray("bg.1bp", 960);
- this.devImage = this.ReadByteArray("dev.1bp", 960);
- this.titleImage = this.ReadByteArray("title.1bp", 960);
- this.winnerImage = this.ReadByteArray("winner.1bp", 960);
- this.stageImages = new byte[5][];
- this.stageImages[0] = this.ReadByteArray("stage1.1bp", 960);
- this.gearImages = new Image[2];
- this.gearImages[0] = Image.createImage("/gear1.png");
- this.gearImages[1] = Image.createImage("/gear2.png");
- this.mntsImage = this.ReadByteArray("mnts.1bp", 372);
- this.car0Image = this.ReadByteArray("car0.1bp", 204);
- this.car0Mask = this.ReadByteArray("car0m.1bp", 204);
- this.flipImage = this.ReadByteArray("flip.1bp", 256);
- this.flipMask = this.ReadByteArray("flipm.1bp", 256);
- this.countImage = this.ReadByteArray("321.1bp", 261);
- this.countMask = this.ReadByteArray("321m.1bp", 261);
- this.goImage = this.ReadByteArray("go.1bp", 261);
- this.goMask = this.ReadByteArray("gom.1bp", 261);
- this.textImage = this.ReadByteArray("text.1bp", 231);
- this.textMask = this.ReadByteArray("textm.1bp", 231);
- this.levelMap = new byte[5][];
- this.levelTrk = new byte[5][];
- this.levelMap[0] = this.ReadByteArray("level1.map", 252);
- this.levelTrk[0] = this.ReadByteArray("level1.trk", 18);
- this.gfxManager = new GraphicObjectManager();
-
- for(int var4 = 0; var4 < 37; ++var4) {
- for(int var9 = 0; var9 < 14; ++var9) {
- System.arraycopy(this.roadpix, 888 * var9 + var4 * 24, this.roadpixels[var9 * 2 + 0], var4 * 12, 12);
- System.arraycopy(this.roadpix, 888 * var9 + var4 * 24 + 12, this.roadpixels[var9 * 2 + 1], var4 * 12, 12);
- }
- }
-
- this.obsSprite = new Sprite[8];
-
- for(int var10 = 0; var10 < 8; ++var10) {
- this.obsSprite[var10] = new Sprite(this.obsImage, 0, 16, 16, this.obsMask, 0, 48);
- this.gfxManager.addObject(this.obsSprite[var10]);
- this.obsSprite[var10].setVisible(false);
- }
-
- this.carSprite = new Sprite(this.car0Image, 0, 32, 17, this.car0Mask, 0, 3);
- this.gfxManager.addObject(this.carSprite);
- this.carSprite.setPosition(32, 64);
- this.carSprite.setVisible(false);
- this.flipSprite = new Sprite(this.flipImage, 0, 32, 32, this.flipMask, 0, 2);
- this.gfxManager.addObject(this.flipSprite);
- this.flipSprite.setVisible(false);
- this.countSprite = new Sprite(this.countImage, 0, 24, 29, this.countMask, 0, 3);
- this.gfxManager.addObject(this.countSprite);
- this.countSprite.setVisible(false);
- this.goSprite = new Sprite(this.goImage, 0, 72, 29, this.goMask, 0, 1);
- this.gfxManager.addObject(this.goSprite);
- this.goSprite.setVisible(false);
- this.textSprite = new Sprite(this.textImage, 0, 56, 11, this.textMask, 0, 3);
- this.gfxManager.addObject(this.textSprite);
- this.textSprite.setVisible(false);
- } catch (Exception var8) {
- System.out.println("i1 Exception: " + var8);
- }
-
- this.fontsmall = Font.getFont(32, 0, 8);
- this.player = new int[12];
- this.obsticles = new int[32];
- this.mapPos = 0;
- this.linetab = new int[37];
- this.zdiffs = new int[37];
-
- for(int var11 = 0; var11 < 36; ++var11) {
- this.zdiffs[var11] = this.zvals[var11] - this.zvals[var11 + 1];
- }
-
- this.zdiffs[36] = 0;
- this.z_to_y = new int[500];
-
- for(int var12 = 0; var12 < this.zvals[35]; ++var12) {
- this.z_to_y[var12] = 64;
- }
-
- for(int var13 = this.zvals[0]; var13 < 500; ++var13) {
- this.z_to_y[var13] = 27;
- }
-
- for(int var14 = 0; var14 < 36; ++var14) {
- for(int var3 = this.zvals[var14]; var3 > this.zvals[var14 + 1]; --var3) {
- this.z_to_y[var3] = 43 + var14 - 16;
- }
- }
-
- this.z_to_scale = new int[500];
-
- for(int var15 = 0; var15 < 500; ++var15) {
- int var7;
- if (var15 > 0) {
- var7 = 888 / var15;
- } else {
- var7 = 16;
- }
-
- if (var7 < this.object_widths[7]) {
- this.z_to_scale[var15] = 7;
- } else {
- for(int var17 = 0; var17 < 8; ++var17) {
- if (var7 >= this.object_widths[var17]) {
- this.z_to_scale[var15] = var17;
- break;
- }
- }
- }
- }
-
- this.keyMap = new byte[256];
-
- for(int var16 = 0; var16 < 256; ++var16) {
- this.keyMap[var16] = 0;
- }
-
- this.keyMap[((Canvas)this).getKeyCode(2) & 255] = 1;
- this.keyMap[((Canvas)this).getKeyCode(5) & 255] = 2;
- this.keyMap[((Canvas)this).getKeyCode(1) & 255] = 4;
- this.keyMap[((Canvas)this).getKeyCode(6) & 255] = 8;
- this.keyMap[((Canvas)this).getKeyCode(8) & 255] = 16;
- this.keyMap[252] = 16;
- this.keyMap[255] = 32;
- this.keyMap[52] = 1;
- this.keyMap[54] = 2;
- this.keyMap[50] = 4;
- this.keyMap[56] = 8;
- this.keyMap[53] = 16;
- System.gc();
- this.ReadSettings();
- this.cdFPS = 18;
- this.setState(0);
- this.readyToPaint = true;
- }
-
- public int ReadSettings() {
- RecordStore var1 = null;
- boolean var3 = false;
- int var4 = 0;
-
- try {
- var1 = RecordStore.openRecordStore("settings", false);
- } catch (RecordStoreException var15) {
- }
-
- if (var1 == null) {
- return 0;
- } else {
- byte[] var2 = new byte[128];
- var2[0] = 0;
- RecordEnumeration var7 = null;
-
- try {
- var7 = var1.enumerateRecords((RecordFilter)null, (RecordComparator)null, false);
- } catch (RecordStoreNotOpenException var14) {
- }
-
- try {
- var4 = var7.nextRecordId();
- } catch (InvalidRecordIDException var13) {
- }
-
- try {
- var1.getRecord(var4, var2, 0);
- } catch (RecordStoreException var12) {
- }
-
- byte[] var5 = new byte[16];
-
- for(int var8 = 0; var8 < 4; ++var8) {
- int var6 = 0;
-
- for(int var9 = 0; var9 < 16; ++var9) {
- byte var10 = var2[var8 * 18 + var9];
- if (var10 != 0) {
- var5[var9] = var10;
- ++var6;
- }
- }
-
- this.hi_names[var8] = new String(var5, 0, var6);
- this.hi_scores[var8] = var2[var8 * 18 + 16] & 255 | var2[var8 * 18 + 17] << 8;
- }
-
- try {
- var1.closeRecordStore();
- } catch (RecordStoreException var11) {
- }
-
- return 1;
- }
- }
-
- public void WriteSettings() {
- RecordStore var1 = null;
- int var3 = 0;
- int var4 = 0;
-
- try {
- var1 = RecordStore.openRecordStore("settings", true);
- } catch (RecordStoreException var16) {
- }
-
- if (var1 != null) {
- try {
- var3 = var1.getNumRecords();
- } catch (RecordStoreException var15) {
- }
-
- RecordEnumeration var7 = null;
-
- try {
- var7 = var1.enumerateRecords((RecordFilter)null, (RecordComparator)null, false);
- } catch (RecordStoreNotOpenException var14) {
- }
-
- try {
- var4 = var7.nextRecordId();
- } catch (InvalidRecordIDException var13) {
- }
-
- byte[] var2 = new byte[128];
-
- for(int var8 = 0; var8 < 4; ++var8) {
- int var6 = this.hi_names[var8].length();
- byte[] var5 = this.hi_names[var8].getBytes();
-
- for(int var9 = 0; var9 < 16; ++var9) {
- if (var9 < var6) {
- var2[var8 * 18 + var9] = var5[var9];
- } else {
- var2[var8 * 18 + var9] = 0;
- }
- }
-
- var2[var8 * 18 + 16] = (byte)(this.hi_scores[var8] & 255);
- var2[var8 * 18 + 17] = (byte)(this.hi_scores[var8] >> 8 & 255);
- }
-
- if (var3 == 0) {
- try {
- var1.addRecord(var2, 0, 128);
- } catch (RecordStoreException var12) {
- }
- } else {
- try {
- var1.setRecord(var4, var2, 0, 128);
- } catch (RecordStoreException var11) {
- }
- }
-
- try {
- var1.closeRecordStore();
- } catch (RecordStoreException var10) {
- }
- }
-
- }
-
- public void initLevel(byte[] var1, byte[] var2) {
- for(int var3 = 0; var3 < 1000; ++var3) {
- this.theMap[var3 * 4 + 0] = 0;
- this.theMap[var3 * 4 + 1] = 0;
- this.theMap[var3 * 4 + 2] = 0;
- this.theMap[var3 * 4 + 3] = 0;
- }
-
- for(int var8 = 0; (var1[var8 * 4 + 0] & 255) != 255; ++var8) {
- int var7 = var1[var8 * 4 + 1] & 255 | (var1[var8 * 4 + 2] & 255) << 8;
- if (this.theMap[var7 * 4 + 0] == 0) {
- this.theMap[var7 * 4 + 0] = var1[var8 * 4 + 0];
- this.theMap[var7 * 4 + 1] = var1[var8 * 4 + 3];
- } else {
- this.theMap[var7 * 4 + 2] = var1[var8 * 4 + 0];
- this.theMap[var7 * 4 + 3] = var1[var8 * 4 + 3];
- }
- }
-
- int var6 = var2[0] << 1;
- int var5 = 3;
- int var10 = var2[var5 + 1] & 255 | (var2[var5 + 2] & 255) << 8;
-
- for(int var9 = 0; var9 < 1000; ++var9) {
- if (var9 == var10) {
- var6 = var2[var5 + 0] << 1;
- var5 += 3;
- if ((var2[var5 + 0] & 255) == 255) {
- var10 = -1;
- } else {
- var10 = var2[var5 + 1] & 255 | (var2[var5 + 2] & 255) << 8;
- }
- }
-
- int var4 = var6 + ((var9 & 2) >> 1);
- this.theTrack[var9 * 8 + 0] = (byte)var4;
- this.theTrack[var9 * 8 + 1] = (byte)var4;
- this.theTrack[var9 * 8 + 2] = (byte)var4;
- this.theTrack[var9 * 8 + 3] = (byte)var4;
- this.theTrack[var9 * 8 + 4] = (byte)var4;
- this.theTrack[var9 * 8 + 5] = (byte)var4;
- this.theTrack[var9 * 8 + 6] = (byte)var4;
- this.theTrack[var9 * 8 + 7] = (byte)var4;
- }
-
- }
-
- public void startGame() {
- this.carSprite.setVisible(true);
- this.carSprite.setFrame(0);
- this.carSprite.setPosition(32, 64);
- this.flipSprite.setVisible(false);
-
- for(int var1 = 0; var1 < 37; ++var1) {
- this.linetab[var1] = 2;
- }
-
- this.redraw = true;
- this.player[0] = 0;
- this.player[1] = 0;
- this.player[2] = 0;
- this.player[3] = 0;
- this.player[4] = 0;
- this.player[6] = 0;
- this.player[7] = 40;
- this.player[8] = 0;
- this.player[9] = 0;
- this.player[10] = 0;
- this.player[11] = 0;
- this.lastScore = -1;
- this.lastCountdown = -1;
- this.lastSpeed = -1;
- this.lastGear = -1;
- this.lastTrack = 0;
- this.cdDigit = this.player[7];
- this.trackSeg = 0;
- this.initObsticles();
- }
-
- public void spritesOff() {
- this.countSprite.setVisible(false);
- this.goSprite.setVisible(false);
- this.textSprite.setVisible(false);
-
- for(int var1 = 0; var1 < 8; ++var1) {
- this.obsSprite[var1].setVisible(false);
- }
-
- this.carSprite.setVisible(false);
- this.flipSprite.setVisible(false);
- }
-
- public void endGame() {
- this.player[5] = 0;
- this.levelNum = 0;
- this.spritesOff();
- }
-
- public void initObsticles() {
- for(int var4 = 28; var4 >= 0; var4 -= 4) {
- this.obsticles[var4 + 2] = 0;
- }
-
- byte var1 = 5;
- byte var2 = 26;
- this.availObsticle = 28;
-
- for(int var3 = var1; var3 < var2; ++var3) {
- if (this.theMap[var3 * 4 + 0] != 0) {
- this.obsticles[this.availObsticle + 0] = -1;
- this.obsticles[this.availObsticle + 1] = (this.theMap[var3 * 4 + 0] - 8) * 240;
- this.obsticles[this.availObsticle + 2] = var3 << 11;
- this.obsticles[this.availObsticle + 3] = (this.theMap[var3 * 4 + 1] - 1) * 8;
- this.obsSprite[this.availObsticle >> 2].setVisible(true);
- this.availObsticle -= 4;
- if (this.availObsticle < 0) {
- this.availObsticle = 28;
- }
- }
-
- if (this.theMap[var3 * 4 + 2] != 0) {
- this.obsticles[this.availObsticle + 0] = -1;
- this.obsticles[this.availObsticle + 1] = (this.theMap[var3 * 4 + 2] - 8) * 240;
- this.obsticles[this.availObsticle + 2] = var3 << 11;
- this.obsticles[this.availObsticle + 3] = (this.theMap[var3 * 4 + 3] - 1) * 8;
- this.obsSprite[this.availObsticle >> 2].setVisible(true);
- this.availObsticle -= 4;
- if (this.availObsticle < 0) {
- this.availObsticle = 28;
- }
- }
- }
-
- this.mapPos = var2;
- }
-
- public void drawNDigitNumber(Graphics var1, int var2, int var3, int var4, int var5) {
- var2 += 6 * (var5 - 1);
-
- for(int var6 = 0; var6 < var5; ++var6) {
- int var7 = var4 % 10;
- var1.drawImage(this.numberImages[var7], var2, var3, 16 | 4);
- var4 /= 10;
- var2 -= 6;
- }
-
- }
-
- public byte[] ReadByteArray(String var1, int var2) {
- byte[] var3 = null;
-
- try {
- InputStream var4 = this.getClass().getResourceAsStream(var1);
- var3 = new byte[var2];
- var4.read(var3, 0, var2);
- var4.close();
- } catch (Exception var5) {
- System.out.println("Exception: please copy the sprite-files from \\res to your class-files directory (CLASSPATH)!\n" + var5);
- }
-
- return var3;
- }
-
- public int[] ReadIntArray(String var1, int var2) {
- Object var3 = null;
- int[] var4 = null;
-
- try {
- InputStream var6 = Connector.openInputStream("resource:" + var1);
- byte[] var8 = new byte[4];
- var4 = new int[var2];
-
- for(int var5 = 0; var5 < var2; ++var5) {
- var6.read(var8, 0, 4);
- var4[var5] = var8[0] & 255 | (var8[1] & 255) << 8 | (var8[2] & 255) << 16 | (var8[3] & 255) << 24;
- }
-
- var6.close();
- } catch (Exception var7) {
- System.out.println("Exception: please copy the sprite-files from \\res to your class-files directory (CLASSPATH)!\n" + var7);
- }
-
- return var4;
- }
-
- public int validateAction(int var1, int var2, String var3) {
- byte var4 = 1;
- switch (var2) {
- case 0:
- this.addHiScore(this.player[5], var3);
- this.setState(9);
- var4 = 0;
- break;
- case 1:
- this.setState(1);
- var4 = 0;
- break;
- case 2:
- if (var1 == 0) {
- this.setState(2);
- var4 = 0;
- } else if (var1 == 1) {
- this.this$0.notifyDestroyed();
- var4 = 0;
- } else if (var1 == 2) {
- this.setState(1);
- var4 = 0;
- } else if (var1 == 3) {
- this.setState(10);
- var4 = 2;
- }
- }
-
- return var4;
- }
-
- public boolean checkHiScore(int var1) {
- for(int var2 = 0; var2 < 4; ++var2) {
- if (var1 > this.hi_scores[var2]) {
- return true;
- }
- }
-
- return false;
- }
-
- public void addHiScore(int var1, String var2) {
- for(int var3 = 0; var3 < 4; ++var3) {
- if (var1 > this.hi_scores[var3]) {
- for(int var4 = 3; var4 > var3; --var4) {
- this.hi_names[var4] = this.hi_names[var4 - 1];
- this.hi_scores[var4] = this.hi_scores[var4 - 1];
- }
-
- this.hi_names[var3] = var2;
- this.hi_scores[var3] = var1;
- break;
- }
- }
-
- }
-
- public void drawHiScore(Graphics var1) {
- var1.setFont(this.fontsmall);
- var1.setColor(0);
- var1.drawString("High Scores", (((Canvas)this).getWidth() >> 1) - (this.fontsmall.stringWidth("High Scores") >> 1), 0, 16 | 4);
-
- for(int var2 = 1; var2 < 5; ++var2) {
- var1.drawString(String.valueOf(var2), 0, 2 + 13 * var2, 16 | 4);
- var1.drawString(this.hi_names[var2 - 1], 8, 2 + 13 * var2, 16 | 4);
- var1.drawString(String.valueOf(this.hi_scores[var2 - 1]), 96 - this.fontsmall.stringWidth(String.valueOf(this.hi_scores[var2 - 1])), 2 + 13 * var2, 16 | 4);
- }
-
- }
-
- public void clearRoad() {
- for(int var1 = 0; var1 < 444; ++var1) {
- this.roadbmp[var1] = 0;
- }
-
- }
-
- public void setState(int var1) {
- this.joystick = 0;
- this.gameState = var1;
- switch (var1) {
- case 0:
- this.clearRoad();
- this.gameTimer = (int)System.currentTimeMillis();
- break;
- case 1:
- this.clearRoad();
- this.gameTimer = (int)System.currentTimeMillis();
- this.endGame();
- break;
- case 2:
- this.spritesOff();
- this.clearRoad();
- this.gameTimer = (int)System.currentTimeMillis();
- break;
- case 3:
- this.initLevel(this.levelMap[this.levelNum], this.levelTrk[this.levelNum]);
- this.startGame();
- this.countDown = 0;
- this.gameTimer = (int)System.currentTimeMillis();
- break;
- case 4:
- this.cdFrames = 0;
- break;
- case 5:
- this.gameTimer = (int)System.currentTimeMillis();
- break;
- case 6:
- this.gameTimer = (int)System.currentTimeMillis();
- break;
- case 7:
- this.gameTimer = (int)System.currentTimeMillis();
- break;
- case 8:
- this.this$0.setNameBox();
- break;
- case 9:
- this.spritesOff();
- this.gameScreen.clear((byte)0);
- break;
- case 10:
- this.this$0.setHelpBox();
- break;
- case 11:
- this.this$0.setMainMenu();
- }
-
- }
-
- public void Update() {
- if (this.gameState == 0) {
- this.gameScreen.setPixels(this.devImage, 0, 0, 96, 80);
- int var1 = (int)System.currentTimeMillis() - this.gameTimer;
- if (var1 > 3000) {
- this.setState(1);
- }
- } else if (this.gameState == 1) {
- int var17 = (int)System.currentTimeMillis() - this.gameTimer;
- if (var17 > 5000) {
- this.gameScreen.clear((byte)0);
- this.drawHiScore(this.gameScreen.getImage().getGraphics());
- if (var17 > 10000) {
- this.gameTimer = (int)System.currentTimeMillis();
- }
- } else {
- this.gameScreen.setPixels(this.titleImage, 0, 0, 96, 80);
- }
-
- if ((this.joystick & 16) != 0) {
- this.setState(11);
- }
- } else if (this.gameState == 2) {
- this.gameScreen.setPixels(this.stageImages[this.levelNum], 0, 0, 96, 80);
- int var18 = (int)System.currentTimeMillis() - this.gameTimer;
- if (this.joystick != 0 || var18 > 2000) {
- this.setState(3);
- }
- } else if (this.gameState != 3 && this.gameState != 4) {
- if (this.gameState == 5) {
- this.textSprite.setFrame(2);
- this.textSprite.setVisible(true);
- this.textSprite.setPosition(20, 22);
- int var24 = (int)System.currentTimeMillis() - this.gameTimer;
- if (var24 > 2000) {
- this.textSprite.setVisible(false);
- if (this.checkHiScore(this.player[5])) {
- this.setState(8);
- } else {
- this.setState(1);
- }
- }
- } else if (this.gameState == 6) {
- this.textSprite.setFrame(1);
- this.textSprite.setVisible(true);
- this.textSprite.setPosition(20, 22);
- int var25 = (int)System.currentTimeMillis() - this.gameTimer;
- if (var25 > 3000) {
- this.textSprite.setVisible(false);
- int[] var40 = this.player;
- var40[5] += 20 * this.player[7];
- ++this.levelNum;
- if (this.levelNum < 5) {
- this.setState(2);
- } else {
- this.setState(7);
- }
- }
- } else if (this.gameState == 7) {
- this.gameScreen.setPixels(this.winnerImage, 0, 0, 96, 80);
- int var26 = (int)System.currentTimeMillis() - this.gameTimer;
- if (var26 > 5000) {
- if (this.checkHiScore(this.player[5])) {
- this.setState(8);
- } else {
- this.setState(1);
- }
- }
- } else if (this.gameState != 8 && this.gameState == 9) {
- this.WriteSettings();
- this.setState(1);
- }
- } else {
- if (this.redraw) {
- this.gameScreen.setPixels(this.bgImage, 0, 0, 96, 80);
- this.redraw = false;
- }
-
- if (this.gameState == 4 && this.player[0] != 2) {
- ++this.cdFrames;
- if (this.cdFrames >= this.cdFPS) {
- this.cdFrames = 0;
- int var10002 = this.player[7]--;
- if (this.player[7] <= 0) {
- this.player[7] = 0;
- this.setState(5);
- }
- }
- }
-
- this.cdDigit = this.player[7];
- if (this.cdDigit != this.lastCountdown) {
- this.lastCountdown = this.cdDigit;
- this.drawNDigitNumber(this.gameScreen.getImage().getGraphics(), 42, 6, this.cdDigit, 2);
- }
-
- if (this.player[5] != this.lastScore) {
- this.lastScore = this.player[5];
- this.drawNDigitNumber(this.gameScreen.getImage().getGraphics(), 0, 6, this.player[5], 4);
- }
-
- if (this.player[8] != this.lastSpeed) {
- this.lastSpeed = this.player[8];
- this.drawNDigitNumber(this.gameScreen.getImage().getGraphics(), 78, 6, this.player[8], 3);
- }
-
- if (this.gameState == 4) {
- if (this.player[0] == 0) {
- if ((this.joystick & 4) != 0) {
- if (this.player[4] < 256) {
- this.player[9] = 32;
- } else {
- this.player[10] = 1;
- }
- }
-
- if ((this.joystick & 8) != 0) {
- this.joystick &= -9;
- if (this.player[10] == 1) {
- this.player[10] = 0;
- } else {
- this.player[9] = -32;
- }
- }
-
- byte var19 = 0;
- int var3 = 0;
- if ((this.joystick & 2) != 0) {
- var19 = 1;
- var3 = this.player[11] >> 1;
- } else if ((this.joystick & 1) != 0) {
- var19 = 2;
- var3 = -this.player[11] >> 1;
- }
-
- if (var19 != this.player[3]) {
- this.carSprite.setFrame(var19);
- this.player[3] = var19;
- }
-
- if (var3 != 0) {
- int[] var10000 = this.player;
- var10000[1] += var3;
- if (this.player[1] > 12288) {
- this.player[1] = 12288;
- }
-
- if (this.player[1] < -12288) {
- this.player[1] = -12288;
- }
- }
- } else if (this.player[0] == 1) {
- this.flipyvel -= 10;
- this.flipy -= this.flipyvel;
- if (this.flipspr == 0 && this.flipyvel > 0 && this.flipy >> 4 <= 64) {
- this.flipSprite.setVisible(true);
- this.carSprite.setVisible(false);
- this.flipspr = 1;
- }
-
- if (this.flipspr == 1 && this.flipyvel < 0) {
- this.flipspr = 2;
- }
-
- if (this.flipy >> 4 >= 63) {
- this.flipy = 1008;
- int var41 = this.player[6]--;
- if (this.player[6] < 0) {
- this.flipSprite.setVisible(false);
- this.carSprite.setVisible(true);
- this.player[0] = 0;
- this.flipspr = 0;
- }
- }
- } else if (this.player[0] == 2 && this.player[4] == 0) {
- this.setState(6);
- }
- } else {
- this.joystick = 0;
- }
-
- int var27 = this.theTrack[(this.player[2] >> 8) + 37] >> 1;
- if (var27 == 1 && this.lastTrack != var27) {
- ++this.trackSeg;
- }
-
- int var14;
- int var15;
- if (var27 < 2) {
- var14 = -9216;
- var15 = 9216;
- } else if (var27 >= 2 && var27 <= 7) {
- --var27;
- var14 = -9216;
- var15 = (-5120 * var27 + 9216 * (6 - var27)) / 6;
- } else {
- var27 -= 7;
- var14 = (5120 * var27 + -9216 * (6 - var27)) / 6;
- var15 = 9216;
- }
-
- this.lastTrack = var27;
- if (this.player[10] != this.lastGear) {
- this.lastGear = this.player[10];
- this.gameScreen.getImage().getGraphics().drawImage(this.gearImages[this.player[10]], 62, 0, 20);
- }
-
- if (this.player[9] > 0) {
- short var13;
- if (this.player[10] == 0) {
- this.player[9] = 32;
- var13 = 768;
- } else {
- if (this.player[4] < 640) {
- this.player[9] = 16;
- } else {
- this.player[9] = 32;
- }
-
- var13 = 1024;
- }
-
- if (this.player[1] < var14 || this.player[1] > var15) {
- var13 = 512;
- }
-
- var27 = this.player[4] - var13;
- if (var27 < 0) {
- int[] var35 = this.player;
- var35[4] += this.player[9];
- } else if (var27 < 32) {
- int[] var36 = this.player;
- var36[4] -= var27;
- } else {
- int[] var37 = this.player;
- var37[4] -= 32;
- }
- } else {
- int[] var34 = this.player;
- var34[4] += this.player[9];
- }
-
- if (this.player[4] < 0) {
- this.player[4] = 0;
- }
-
- this.player[8] = this.player[4] * 160 >> 10;
- this.player[11] = this.player[4] * 355 >> 8;
- int[] var38 = this.player;
- var38[2] += this.player[11];
- if (this.player[0] != 2 && this.trackSeg == 2) {
- this.player[0] = 2;
- this.player[9] = -60;
- }
-
- int var20 = this.availObsticle;
- int[] var6 = this.obsticles;
- var27 = this.player[2] + 'φÿÇ' >> 11;
- if (var27 != this.mapPos) {
- this.mapPos = var27;
- if (this.theMap[this.mapPos * 4 + 0] != 0) {
- var6[var20 + 0] = -1;
- var6[var20 + 1] = (this.theMap[this.mapPos * 4 + 0] - 8) * 240;
- var6[var20 + 2] = 54784;
- var6[var20 + 3] = this.theMap[this.mapPos * 4 + 1] - 1 << 3;
- this.obsSprite[var20 >> 2].setVisible(true);
- var20 -= 4;
- if (var20 < 0) {
- var20 = 28;
- }
- }
-
- if (this.theMap[this.mapPos * 4 + 2] != 0) {
- var6[var20 + 0] = -1;
- var6[var20 + 1] = (this.theMap[this.mapPos * 4 + 2] - 8) * 240;
- var6[var20 + 2] = 54784;
- var6[var20 + 3] = this.theMap[this.mapPos * 4 + 3] - 1 << 3;
- this.obsSprite[var20 >> 2].setVisible(true);
- var20 -= 4;
- if (var20 < 0) {
- var20 = 28;
- }
- }
- }
-
- this.availObsticle = var20;
-
- for(int var12 = 0; var12 < 8; ++var12) {
- var20 += 4;
- if (var20 > 28) {
- var20 = 0;
- }
-
- int var16;
- if ((var16 = var6[var20 + 2] >> 8) != 0) {
- var6[var20 + 2] -= this.player[11];
- var27 = var6[var20 + 2] >> 8;
- if (var27 < 37) {
- this.obsSprite[var20 >> 2].setVisible(false);
- var6[var20 + 2] = 0;
- }
-
- int var9 = var6[var20 + 1] / var27 + 40;
- if (var16 >= 39 && var27 < 39 && var9 < (this.player[1] >> 8) + 60 && (this.player[1] >> 8) + 33 < var9 + 15) {
- if (var6[var20 + 3] == 0) {
- this.obsSprite[var20 >> 2].setVisible(false);
- var38 = this.player;
- var38[5] += 30;
- var6[var20 + 2] = 0;
- } else {
- this.player[0] = 1;
- this.player[9] = -96;
- this.player[6] = 30;
- this.flipy = 1008;
- this.flipyvel = 80;
- this.flipspr = 0;
- }
- }
-
- this.obsSprite[var20 >> 2].setPosition(var9, this.z_to_y[var27]);
- int var5 = this.z_to_scale[var27] + var6[var20 + 3];
- if (var5 != var6[var20 + 0]) {
- var6[var20 + 0] = var5;
- this.obsSprite[var20 >> 2].setFrame(var5);
- }
- }
- }
-
- var6 = this.linetab;
- int[] var7 = this.zdiffs;
- byte[] var2 = this.theTrack;
- var27 = (this.player[2] >> 8) + this.zvals[0];
- var20 = 0;
-
- for(int var32 = 0; var20 < 37; var32 += 12) {
- byte var4;
- if ((var4 = var2[var27]) != var6[var20]) {
- var6[var20] = var4;
- System.arraycopy(this.roadpixels[var4], var32, this.roadbmp, var32, 12);
- }
-
- var27 -= var7[var20];
- ++var20;
- }
-
- this.gameScreen.setPixels(this.roadbmp, 0, 43, 96, 37);
- if (this.player[0] != 1) {
- this.carSprite.setPosition((this.player[1] >> 8) + 34, 63);
- } else {
- this.gameScreen.setPixels(this.mntsImage, 0, 13, 96, 31);
- if (this.flipspr == 0) {
- this.carSprite.setPosition((this.player[1] >> 8) + 34, this.flipy >> 4);
- } else {
- this.flipSprite.setFrame(this.flipspr - 1);
- this.flipSprite.setPosition((this.player[1] >> 8) + 34, (this.flipy >> 4) - 15);
- }
- }
-
- if (this.gameState == 3) {
- var20 = (int)System.currentTimeMillis() - this.gameTimer;
- if (var20 > 1000) {
- this.gameTimer = (int)System.currentTimeMillis();
- ++this.countDown;
- if (this.countDown == 3) {
- this.setState(4);
- }
- }
-
- this.gameScreen.setPixels(this.mntsImage, 0, 13, 96, 31);
- if (this.countDown < 3) {
- this.countSprite.setFrame(this.countDown);
- this.countSprite.setVisible(true);
- this.countSprite.setPosition(36, 16);
- } else {
- this.countSprite.setVisible(false);
- }
- } else if (this.countDown == 3) {
- this.gameScreen.setPixels(this.mntsImage, 0, 13, 96, 31);
- var20 = (int)System.currentTimeMillis() - this.gameTimer;
- if (var20 > 700) {
- this.goSprite.setVisible(false);
- ++this.countDown;
- } else {
- this.goSprite.setVisible(true);
- this.goSprite.setPosition(12, 16);
- }
- }
-
- if (this.player[0] == 2) {
- this.textSprite.setFrame(1);
- this.textSprite.setVisible(true);
- this.textSprite.setPosition(20, 22);
- }
- }
-
- }
-
- public void run() {
- while(true) {
- try {
- Thread.yield();
- } catch (Exception var4) {
- }
-
- if (this.gameState != 8 && this.gameState != 10 && this.gameState != 11) {
- this.Update();
-
- try {
- this.gfxManager.paint(this.gameScreen, 0, 0);
- this.gameScreen.blitToScreen(0, 0);
- } catch (Exception var3) {
- System.out.println("Exception: " + var3);
- }
- }
- }
- }
-
- public void paint(Graphics var1) {
- if (this.readyToPaint) {
- try {
- this.gfxManager.paint(this.gameScreen, 0, 0);
- this.gameScreen.blitToScreen(0, 0);
- } catch (Exception var3) {
- System.out.println("Exception: " + var3);
- }
- }
-
- }
-
- public void keyRepeated(int var1) {
- }
-
- public void keyReleased(int var1) {
- this.joystick = 0;
- }
-
- public void keyPressed(int var1) {
- this.joystick = this.keyMap[var1 & 255];
- }
- }
-